package com.wb3.meta.api.core.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.wb3.meta.api.core.dao.EventRecordMapper;
import com.wb3.meta.api.core.model.EventRecord;
import com.wb3.meta.api.core.service.EventRecordService;
import com.wb3.meta.api.core.vo.ReqEventRecordVo;
import com.wb3.meta.api.core.vo.ResEventRecordVo;
import com.wb3.meta.common.enums.EnumConstants;
import com.wb3.meta.common.mybatis.DataTableUtil;
import com.wb3.meta.common.pojo.ResultT;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

@Slf4j
@Service("eventRecordService")
@Transactional(transactionManager = "dataSourceTransactionManagerOne", rollbackFor = Exception.class)
public class EventRecordServiceImpl implements EventRecordService {
    @Autowired
    private EventRecordMapper eventRecordMapper;
    /**
     * 分页查询方法
     *
     * @param vo
     * @return
     */
    @Override
    public Page<ResEventRecordVo> getModelPage(ReqEventRecordVo vo) {

        PageHelper.startPage(vo.getPageNum(), vo.getPageSize());

        return (Page<ResEventRecordVo>) getModelListByConditions(vo);
    }

    /**
     * 列表查询方法 -返回 res 对象
     *
     * @param vo
     * @return
     */
    @Override
    public List<ResEventRecordVo> getModelListByConditions(ReqEventRecordVo vo) {
        return eventRecordMapper.getModelListByConditions(vo);
    }

    /**
     * 根据条件查询单条数据方法，返回res vo类
     *
     * @param vo
     * @return
     */
    @Override
    public ResEventRecordVo getResModelByConditions(ReqEventRecordVo vo) {
        return eventRecordMapper.getResModelByConditions(vo);
    }

    /**
     * 根据条件查询单个对象方法
     *
     * @param eventRecord
     * @return
     */
    @Override
    public EventRecord getModelByConditions(EventRecord eventRecord) {
        return null;
    }

    /**
     * 根据id查询单个对象方法
     *
     * @param id
     * @return
     */
    @Override
    public EventRecord getModelById(Object id) {
        return eventRecordMapper.selectByPrimaryKey(id);
    }

    /**
     * 新增对象方法
     *
     * @param eventRecord
     */
    @Override
    public void addModel(EventRecord eventRecord) {
        eventRecord.setCreateTime(new Date().getTime());
        eventRecord.setStatus(EnumConstants.StatusEnum.VALID.getCode());
        eventRecordMapper.insertUseGeneratedKeys(eventRecord);
    }

    /**
     * 更新对象方法
     *
     * @param eventRecord
     */
    @Override
    public void updateModel(EventRecord eventRecord) {
        eventRecord.setUpdateTime(new Date().getTime());
        eventRecordMapper.updateByPrimaryKeySelective(eventRecord);
    }

    /**
     * 根据id删除对象方法
     *
     * @param id
     */
    @Override
    public void deleteModelById(Object id) {

    }

    /**
     * 获取分页数据，返回 map对象方法
     *
     * @param vo
     * @return
     */
    @Override
    public ResultT getModelMapPage(ReqEventRecordVo vo) {
        return ResultT.success(DataTableUtil.changePage(getModelPage(vo)));
    }

    /**
     * 根据id查询单个对象方法，返回 map对象方法
     *
     * @param id
     * @return
     */
    @Override
    public ResultT getModelMapById(Object id) {
        return null;
    }

    /**
     * 根据条件查询单个对象，返回map对象方法
     *
     * @param eventRecord
     * @return
     */
    @Override
    public ResultT getModelMapByConditions(EventRecord eventRecord) {
        return null;
    }

    /**
     * 查询列表-map对象
     *
     * @param vo
     * @return
     */
    @Override
    public ResultT getResModelListMapByConditions(ReqEventRecordVo vo) {
        return ResultT.success(eventRecordMapper.getModelListByConditions(vo));
    }

    /**
     * 根据条件查询res vo对象，返回map对象方法
     *
     * @param vo
     * @return
     */
    @Override
    public ResultT getResModelMapByConditions(ReqEventRecordVo vo) {
        return null;
    }

    /**
     * 更新或插入对象方法
     *
     * @param vo
     * @return
     */
    @Override
    public ResultT saveOrUpdate(ReqEventRecordVo vo) {
        if (vo.getId() != null) {
            updateModel(vo);
        } else {
            addModel(vo);
        }
        return ResultT.success(vo);
    }

    /**
     * 根据条件删除方法
     *
     * @param vo
     * @return
     */
    @Override
    public ResultT delete(ReqEventRecordVo vo) {
        return null;
    }


}
